package com.webserver.servlet;

import com.webserver.http.HttpRequest;
import com.webserver.http.HttpResponse;
import com.webserver.vo.User;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 用于生成显示用户列表页面的Servlet
 */
public class ShowAllUserServlet {
    public void service(HttpRequest request, HttpResponse response) {
        System.out.println("ShowAllUserServlet:开始生成动态页面...");

        /*
            流程
            1.读取所有的用户信息(获取所有的.user文件并进行反序列化操作)
            2.将用户信息拼接为一个html内容(生成动态页面的所有数据内容)
            3.将生成的页面响应给客户端
         */

        List<User> userList = new ArrayList<>();//保存所有注册用户
        //先获取所有的.user文件
        File dir = new File(".");//项目目录
        if (dir.isDirectory()) {
            File[] subs = dir.listFiles(
                    //lambda创建文件过滤器,条件:名字以.user结尾的子项
                    (f) -> f.getName().endsWith(".user")
            );
            for (File userFile : subs) {
                try (
                        ObjectInputStream ois = new ObjectInputStream(
                                new FileInputStream(userFile)
                        )
                ) {
                    User user = (User) ois.readObject();
                    userList.add(user);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

             /*
                 2将所有的用户信息生成一个html页面
              */
            try {
                //设置响应头Content-Type用来告诉浏览器我们拼的是个页面
                response.setContentType("text/html");
                
                PrintWriter pw = response.getWriter();
                pw.println("<!DOCTYPE html>");
                pw.println("<html lang=\"en\">");
                pw.println("<head>");
                pw.println("<meta charset=\"UTF-8\">");
                pw.println("<title>用户列表</title>");
                pw.println("</head>");
                pw.println("<body>");
                pw.println("<center>");
                pw.println("<h1>用户列表</h1>");
                pw.println("<table border=\"1\">");
                pw.println("<tr><td>用户名</td><td>密码</td><td>昵称</td><td>年龄</td><td>操作</td></tr>");
                for (User user : userList) {
                    pw.println("<tr>");
                    pw.println("    <td align=\"center\">" + user.getUsername() + "</td>");
                    pw.println("    <td align=\"center\">" + user.getPassword() + "</td>");
                    pw.println("    <td align=\"center\">" + user.getNickname() + "</td>");
                    pw.println("    <td align=\"center\">" + user.getAge() + "</td>");
                    pw.println("    <td align=\"center\"><a href='./deleteUser?username="+user.getUsername()+"'>删除</a></td>");
                    pw.println("</tr>");
                }
                pw.println("</table>");
                pw.println("</center>");
                pw.println("</body>");
                pw.println("</html>");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.println("ShowAllUserServlet:动态页面生成完毕.");
    }
}